/*
 * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package java.lang;

/**
 * 抛出以指示断言失败。
 *
 * <p>此类提供的七个单参数公共构造函数确保通过调用：
 * <pre>
 *     new AssertionError(<i>expression</i>)
 * </pre>
 * 返回的断言错误将 <i>expression</i> 的<i>字符串转换</i>
 * （如 <cite>Java&trade; 语言规范</cite> 第 15.18.1.1 节中定义的）
 * 作为其详细消息，无论 <i>expression</i> 的类型如何。
 *
 * @since   1.4
 */
public class AssertionError extends Error {
    private static final long serialVersionUID = -5013299493970297370L;

    /**
     * 构造一个没有详细消息的 AssertionError。
     */
    public AssertionError() {
    }

    /**
     * 此内部构造函数不对其字符串参数进行任何处理，
     * 即使它是 null 引用。公共构造函数永远不会
     * 使用 null 参数调用此构造函数。
     */
    private AssertionError(String detailMessage) {
        super(detailMessage);
    }

    /**
     * 构造一个 AssertionError，其详细消息派生自指定的对象，
     * 该对象按照 <cite>Java&trade; 语言规范</cite> 第 15.18.1.1 节
     * 中定义的方式转换为字符串。
     *<p>
     * 如果指定的对象是 {@code Throwable} 的实例，它将成为
     * 新构造的断言错误的<i>原因</i>。
     *
     * @param detailMessage 用于构造详细消息的值
     * @see   Throwable#getCause()
     */
    public AssertionError(Object detailMessage) {
        this(String.valueOf(detailMessage));
        if (detailMessage instanceof Throwable)
            initCause((Throwable) detailMessage);
    }

    /**
     * 构造一个 AssertionError，其详细消息派生自指定的 <code>boolean</code>，
     * 该值按照 <cite>Java&trade; 语言规范</cite> 第 15.18.1.1 节
     * 中定义的方式转换为字符串。
     *
     * @param detailMessage 用于构造详细消息的值
     */
    public AssertionError(boolean detailMessage) {
        this(String.valueOf(detailMessage));
    }

    /**
     * 构造一个 AssertionError，其详细消息派生自指定的 <code>char</code>，
     * 该值按照 <cite>Java&trade; 语言规范</cite> 第 15.18.1.1 节
     * 中定义的方式转换为字符串。
     *
     * @param detailMessage 用于构造详细消息的值
     */
    public AssertionError(char detailMessage) {
        this(String.valueOf(detailMessage));
    }

    /**
     * 构造一个 AssertionError，其详细消息派生自指定的 <code>int</code>，
     * 该值按照 <cite>Java&trade; 语言规范</cite> 第 15.18.1.1 节
     * 中定义的方式转换为字符串。
     *
     * @param detailMessage 用于构造详细消息的值
     */
    public AssertionError(int detailMessage) {
        this(String.valueOf(detailMessage));
    }

    /**
     * 构造一个 AssertionError，其详细消息派生自指定的 <code>long</code>，
     * 该值按照 <cite>Java&trade; 语言规范</cite> 第 15.18.1.1 节
     * 中定义的方式转换为字符串。
     *
     * @param detailMessage 用于构造详细消息的值
     */
    public AssertionError(long detailMessage) {
        this(String.valueOf(detailMessage));
    }

    /**
     * 构造一个 AssertionError，其详细消息派生自指定的 <code>float</code>，
     * 该值按照 <cite>Java&trade; 语言规范</cite> 第 15.18.1.1 节
     * 中定义的方式转换为字符串。
     *
     * @param detailMessage 用于构造详细消息的值
     */
    public AssertionError(float detailMessage) {
        this(String.valueOf(detailMessage));
    }

    /**
     * 构造一个 AssertionError，其详细消息派生自指定的 <code>double</code>，
     * 该值按照 <cite>Java&trade; 语言规范</cite> 第 15.18.1.1 节
     * 中定义的方式转换为字符串。
     *
     * @param detailMessage 用于构造详细消息的值
     */
    public AssertionError(double detailMessage) {
        this(String.valueOf(detailMessage));
    }

    /**
     * 构造一个具有指定详细消息和原因的新 {@code AssertionError}。
     *
     * <p>请注意，与 {@code cause} 关联的详细消息<i>不会</i>
     * 自动合并到此错误的详细消息中。
     *
     * @param  message 详细消息，可以为 {@code null}
     * @param  cause 原因，可以为 {@code null}
     *
     * @since 1.7
     */
    public AssertionError(String message, Throwable cause) {
        super(message, cause);
    }
}
